﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Domain;
using System.Data;
using System.Drawing.Imaging;
using System.Drawing;
using System.IO;

namespace Repository
{
    public class ProdutoDB : IQuery<Produto>
    {
        private SqlConnection conn;

        public ProdutoDB(SqlConnection conn)
        {
            this.conn = conn;
        }

        public bool save(Produto e)
        {
            try
            {
            byte[] foto = e.FotoProduto();
            //SqlCommand command = new SqlCommand("insert ','"+e.Marca+"',"+e.Preco+",'true','"+e.Descricao+"',"+1+",@foto)",this.conn);
            //SqlParameter paramFoto = new SqlParameter("@foto", SqlDbType.Binary);
            //paramFoto.Value = foto;
            //command.Parameters.Add(paramFoto);
            SqlCommand comando = new SqlCommand("INSERT into produto (nome, modelo, marca, foto, preco, ativo, descricao,id_fornecedor) values (@Nome, @Modelo, @Marca, @Foto, @Preco, @Ativo, @Descricao,@Id_fornecedor)",this.conn);
            comando.Parameters.AddWithValue("@Nome", e.Nome);
            comando.Parameters.AddWithValue("@Modelo", e.Modelo);
            comando.Parameters.AddWithValue("@Marca", e.Marca);
            comando.Parameters.AddWithValue("@Foto", foto);
            comando.Parameters.AddWithValue("@Preco", e.Preco);
            comando.Parameters.AddWithValue("@Ativo", "true");
            comando.Parameters.AddWithValue("@Descricao", e.Descricao);
            comando.Parameters.AddWithValue("@Id_fornecedor", e.Fornecedor.Id_fornecedor);
            comando.ExecuteNonQuery();
            return true;
            }
            catch (SqlException sqlex) 
            {
                Console.WriteLine("Ocorreu um erro! \n "+sqlex.StackTrace);
               
                return false;
            }
        }

        public bool update(Produto e)
        {
            try
            {
  SqlCommand command = new SqlCommand("UPDATE produto SET nome = '"+e.Nome+"' ,modelo = '"+e.Modelo+"' ,marca = '"+e.Marca+"' ,preco = "+e.Preco+",descricao = '"+e.Descricao+"' WHERE id_produto = "+e.Id_produto+"",this.conn);
  command.ExecuteNonQuery();
                return true;
            }
            catch (SqlException sqlex)
            {
                return false;
            }
        }
        public List<Produto> getAllList()
        {
            try
            {
                SqlCommand command = new SqlCommand("select * from produto", this.conn);
                SqlDataReader dr = command.ExecuteReader();
                List<Produto> produtos = new List<Produto>();
                
                    while(dr.Read())
                    {
                        Fornecedor f = new Fornecedor();
                        Produto p = new Produto();
                        p.Fornecedor = f;
                        p.Id_produto = Convert.ToInt32(dr["id_produto"]);
                        p.Nome = Convert.ToString(dr["nome"]);
                        p.Preco = Convert.ToDecimal(dr["preco"]);
                        p.Modelo = Convert.ToString(dr["modelo"]);
                        p.Marca = Convert.ToString(dr["marca"]);
                        p.Fornecedor.Id_fornecedor = Convert.ToInt32(dr["id_fornecedor"]);
                        p.Descricao = Convert.ToString(dr["descricao"]);
                        try
                        {
                            p.FotoProduto((byte[])dr["foto"]);
                        }
                        catch (Exception)
                        {
                            //obter a simagem defasult, transformar array de bytes e passar

                            string nomeArquivo = @"C:\inetpub\wwwroot\Ecommerce\Ecommerce\Resources\images.jpg";
                            Bitmap bmp = new Bitmap(nomeArquivo);
                            MemoryStream ms = new MemoryStream();
                            bmp.Save(ms, ImageFormat.Jpeg);
                            byte[] foto = ms.ToArray();
                            p.FotoProduto(foto);
                        }
                        produtos.Add(p);
                    }
                    return produtos;
            }
            catch (SqlException sqlex) 
            {
                return null;
            }
            
        }

        public DataTable AuxDataGridProduto() 
        {
            try
            {
                SqlCommand commnand = new SqlCommand("select * from produto where ativo = 'true' ",this.conn);
                SqlDataAdapter da = new SqlDataAdapter(commnand);
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
            catch (SqlException sqlex)
            {
                return null;
            }

        }

        public List<Produto> getListById(int id)
        {
            try
            {
                SqlCommand command = new SqlCommand("select * from produto where id_produto = "+id+" and ativo = 'true' ", this.conn);
                SqlDataReader dr = command.ExecuteReader();
                List<Produto> produtos = new List<Produto>();
                while (dr.Read())
                {
                    Produto p = new Produto();
                    p.Id_produto = Convert.ToInt32(dr["id_produto"]);
                    p.Nome = Convert.ToString(dr["nome"]);
                    p.Preco = Convert.ToDecimal(dr["preco"]);
                    p.Modelo = Convert.ToString(dr["modelo"]);
                    p.Marca = Convert.ToString(dr["marca"]);
                    p.Fornecedor.Id_fornecedor = Convert.ToInt32(dr["id_fornecedor"]);
                    p.Descricao = Convert.ToString(dr["descricao"]);
                    try
                    {
                        p.FotoProduto((byte[])dr["foto"]);
                    }
                    catch (Exception)
                    {
                        //obter a simagem defasult, transformar array de bytes e passar

                        string nomeArquivo = @"C:\Users\William Niedzweidz\Desktop\ECOM\Ecommerce\Ecommerce\Resources\images.jpg";
                        Bitmap bmp = new Bitmap(nomeArquivo);
                        MemoryStream ms = new MemoryStream();
                        bmp.Save(ms, ImageFormat.Jpeg);
                        byte[] foto = ms.ToArray();
                        p.FotoProduto(foto);
                    }
                    produtos.Add(p);
                }
                return produtos;
            }
            catch (SqlException sqlex)
            {
                return null;
            }
        }

        public bool delete(Produto e)
        {
            try
            {
                SqlCommand command = new SqlCommand("update produto SET ativo = 'false' WHERE id_produto = "+e.Id_produto+" ", this.conn);
                command.ExecuteNonQuery();
                return true;
            }
            catch (SqlException sqlex)
            {
                return false;
            }
        }

        public void openConnection()
        {
            this.conn.Open();
        }

        public void closeConnection()
        {
            this.conn.Close();
        }

        public void putConnection(SqlConnection connection)
        {
            this.conn = connection;
        }
    }
}
